// 配置路由
import Vue from 'vue'
import VueRouter from 'vue-router'
// 使用插件
Vue.use(VueRouter)
// 引用封装路由组件
import routes from './routes'
//引入store
import store from '@/store'

// 重写push|replace方法
let originPush = VueRouter.prototype.push
VueRouter.prototype.push = function (location, resolve, reject) {
  if (resolve && reject) {
    originPush.call(this, location, resolve, reject)
  } else {
    originPush.call(
      this,
      location,
      () => {},
      () => {}
    )
  }
}
let originReplace = VueRouter.prototype.replace
VueRouter.prototype.replace = function (location, resolve, reject) {
  if (resolve && reject) {
    originPush.call(this, location, resolve, reject)
  } else {
    originReplace.call(
      this,
      location,
      () => {},
      () => {}
    )
  }
}
// 配置路由
let router = new VueRouter({
  // 配置路由
  routes,
  /**
   * scrollBehavior 方法接收 to 和 from 路由对象。
   * 第三个参数 savedPosition 当且仅当 popstate 导航 (通过浏览器的 前进/后退 按钮触发) 时才可用
   * { x: number, y: number }
     { selector: string, offset? : { x: number, y: number }} (offset 只在 2.6.0+ 支持)
   */
  scrollBehavior(to, from, savedPosition) {
    return { y: 0 }
  }
})

// 全局路由守卫
router.beforeEach(async(to, from, next) => {
  let token = store.state.user.token
  let name = store.state.user.userInfo.name
  //用户登录了
  if (token) {
    //已经登录而且还想去登录------不行
    if (to.path == '/login' || to.path == '/register') {
      next('/')
    } else {
      //已经登陆了,访问的是非登录与注册
      //登录了且拥有用户信息放行
      if (name) {
        next()
      } else {
        //登陆了且没有用户信息
        //在路由跳转之前获取用户信息且放行
        try {
          await store.dispatch('user/getUserInfo')
          next()
        } catch (error) {
          //token失效从新登录
          await store.dispatch('user/userLogout')
          next('/login')
        }
      }
    }
  } else {
    //未登录：不能去交易相关、不能去支付相关【pay|paysuccess】、不能去个人中心
    //未登录去上面这些路由-----登录
    let toPath = to.path
    if (
      toPath.indexOf('/trade') != -1 ||
      toPath.indexOf('/pay') != -1 ||
      toPath.indexOf('/center') != -1
    ) {
      //把未登录的时候向去而没有去成的信息，存储于地址栏中【路由】
      next('/login?redirect=' + toPath)
    } else {
      //去的不是上面这些路由（home|search|shopCart）---放行
      next()
    }
  }
})
export default router
